﻿Imports ADOX ' agregar referencia COM > Microsoft ADO Ext 2.7 (o 2.8)
Imports System.Data.OleDb

Public Class MdbUtil

    Public Shared Function getConnection(ByVal archivo As String, ByVal reemplazar As Boolean, ByVal clave As String) As OleDbConnection
        If reemplazar Then
            Try
                ArchivoUtil.eliminarSiExiste(archivo)
            Catch ex As Exception
                Throw New System.Exception(archivo & " no se puede reemplazar porque está en uso. Cierre el archivo antes de continuar.")
            End Try
        End If

        Dim cadenaCon As String

        'Para compilar en 32 bits. JET no tiene version para 64 bits
        'Nota: Cambiar el Visual Studio para compilar en 32 bits (x86)
        cadenaCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                 "Data Source=" & archivo & ";" & _
                 "Jet OLEDB:Engine Type=5"

        'http://social.msdn.microsoft.com/Forums/vstudio/en-US/a672d920-1974-4ac2-9def-24455ee48592/how-to-close-adoxcatalog
        If Not IsNothing(clave) Then
            cadenaCon = cadenaCon & ";Jet OLEDB:Database Password=" & clave
        End If

        'Para compilar en 64 bits
        'cadenaCon = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=" & archivoMDB

        If Not System.IO.File.Exists(archivo) Then
            'Creando el archivo MDB
            Dim cat As Catalog = New Catalog()
            cat.Create(cadenaCon)
            cerrarArchivoCreadoPorADOXCatalog(cat)
            cat = Nothing
        End If

        Return New OleDbConnection(cadenaCon)
    End Function

    ' Closing Access file created with ADOX.CatalogClass
    ' http://bytes.com/topic/c-sharp/answers/260743-closing-access-file-created-adox-catalogclass
    Private Shared Sub cerrarArchivoCreadoPorADOXCatalog(ByRef cat As Catalog)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(cat)
        GC.Collect()
    End Sub

End Class
